﻿using System.Diagnostics;

namespace UPKAndUDKUnpackTools.Tools;

public static class DirectoryManager
{
    /// <summary>
    /// 创建一个新文件夹并返回其完整路径。
    /// </summary>
    /// <param name="folderName">要创建的文件夹名称。</param>
    /// <returns>新创建文件夹的完整路径。</returns>
    public static string CreateFolder(string folderName)
    {
        // 获取当前工作目录
        var currentDir = Directory.GetCurrentDirectory();
        // 组合当前工作目录和新文件夹名，得到新文件夹的路径
        var newFolderPath = Path.Combine(currentDir, folderName);
        // 创建新文件夹
        Directory.CreateDirectory(newFolderPath);
        // 返回新文件夹的路径
        return newFolderPath;
    }
    
    /// <summary>
    /// 尝试打开指定路径的目录。
    /// </summary>
    /// <param name="path">要打开的目录路径。</param>
    public static void OpenDirectory(string path)
    {
        try
        {
            // 使用系统默认方式尝试打开指定路径
            Process.Start(new ProcessStartInfo
            {
                FileName = path,
                UseShellExecute = true,
                Verb = "open"
            });
        }
        catch (Exception ex)
        {
            // 如果打开过程中出现异常，则输出错误信息
            Console.WriteLine($"打开目录时出现错误: {ex.Message}");
        }
    }
    
    /// <summary>
    /// 清理指定的目录。
    /// </summary>
    public static void CleanUpDirectories()
    {
        // 显示清理操作开始的信息
        Console.WriteLine("清理目录...");
        // 获取当前应用程序的执行目录
        var exeDirectory = AppDomain.CurrentDomain.BaseDirectory;
        // 定义需要删除的目录名称数组
        string[] directoriesToDelete = ["outUpk", "ucpUpk", "unpacked","outUdk","ucpUdk", "temp"];
        // 遍历需要删除的目录数组
        foreach (var dir in directoriesToDelete)
        {
            // 组合执行目录和待删除目录名，得到待删除目录的完整路径
            var dirPath = Path.Combine(exeDirectory, dir);
            // 如果目录存在，则删除该目录及其所有内容
            if (Directory.Exists(dirPath))
            {
                Directory.Delete(dirPath, true);
                // 输出成功删除目录的信息
                Console.WriteLine($"{dir} 目录已成功删除。");
            }
            else
            {
                // 如果目录不存在，输出相应信息
                Console.WriteLine($"{dir} 目录不存在。");
            }
        }
        // 显示清理操作完成的信息
        Console.WriteLine("清理完成。");
    }
}